//
//  Emoticon.swift
//  EmKeyboard
//
//  Created by 崔洋洋 on 15/10/16.
//  Copyright © 2015年 崔洋洋. All rights reserved.
//

import UIKit

/*
    1. Emoticons.bundle的根目录中有一个 emoticons.plist
       packages数组的每一项字典中的 id 对应的是每一套表情的目录名
    2. 每一个表情目录下，都有一个 info.plist 文件
       group_name_cn  记录的表情包的名字
       emoticons 数组  记录的整套表情的数组
    3. 表情字典信息
       chs:    定义的发布微博以及网络传输使用的微博文字字符串
       png:    在客户端显示的图片名称
       code:   emoji要显示的16进制字符串！
*/

// 表情包模型 - 从 .plist 文件加载
class EmoticonPackage: NSObject {
    // 目录名
    var id: String
    // 分组名
    var groupName: String = ""
    // 表情数组
    var emoticons: [Emoticon]?
    init(id: String) {
        self.id = id
    }
    
    // 加载表情包
    class func packages() -> [EmoticonPackage] {
        // 1.加载路径
        let path = bundlePath.stringByAppendingString("/emoticons.plist")
        
        // 2.加载 plist
        let dict = NSDictionary(contentsOfFile: path)!
        let array = dict["packages"] as! [[String: AnyObject]]
        
        // 3. 遍历数组
        var arrayM = [EmoticonPackage]()
        for d in array {
            let id = d["id"]  as! String
            
            // 链式响应
            let package = EmoticonPackage(id: id).loadEmoticons()
            arrayM.append(package)
        }
        return arrayM
    }
    
    // 加载当前对象对应的表情数组，从 info.plist 中加载并完成完整的模型信息
    func loadEmoticons() -> Self {
        // 1.路径
        let path = EmoticonPackage.bundlePath.stringByAppendingString(id).stringByAppendingString("/info.plist")
        let dict = NSDictionary(contentsOfFile: path)!
        groupName = dict["group_name_cn"] as! String
        let array = dict["emoticons"] as! [[String: String]]
        
        // 2.遍历数组
        emoticons = [Emoticon]()
        for d in array {
            // 将表情包的 id 传递给表情，拼接路径
            emoticons?.append(Emoticon(id: id, dict: d))
        }
        return self
    }
    // MARK: 表情包路径
    static let bundlePath = NSBundle.mainBundle().bundlePath.stringByAppendingString("/Emoticons.bundle")
    override var description: String {
        return "\(id) \(groupName) \(emoticons)"
    }
}

// MARK: 表情模型
class Emoticon: NSObject {
    // 表情目录
    var id: String?
    // 发送给服务器的表情文字
    var chs: String?
    // 本地显示的表情文件名
    var png: String?
    // 图片的路径
    var imagePath: String {
        // 判断是否是图片表情
        if chs == nil{
        return ""
        }
        return EmoticonPackage.bundlePath.stringByAppendingString(id!).stringByAppendingString(png!)
    }
    
    // emoji 的代码
    var code: String? {
        didSet {
            let scanner = NSScanner(string: code!)
            var value: UInt32 = 0
            scanner.scanHexInt(&value)
            emoji = String(Character(UnicodeScalar(value)))
        }
    }
    
    // emoji 字符串
    var emoji: String?
    init(id: String, dict: [String: String]) {
        self.id = id
        super.init()
        
        // 根据字典中的值对顺序调用 setValueForKey
        setValuesForKeysWithDictionary(dict)
    }
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    override var description: String {
        return "\(chs) \(png) \(code)"
    }
}







